#!/usr/bin/env python3
# check_dup_outputs.py

import argparse
import json
from collections import defaultdict

def main():
    parser = argparse.ArgumentParser(
        description="检查 JSONL 文件中重复 input 的 output 是否一致"
    )
    parser.add_argument(
        "--file", "-f", required=False, default="./TrainingData/merged_filtered_600.jsonl", type=str,
        help="输入的 JSONL 文件路径，每行一个 JSON，包含 'input' 和 'output' 字段"
    )
    args = parser.parse_args()

    # 1. 读取数据，按 input 分组收集所有 output
    input2outputs = defaultdict(list)
    with open(args.file, 'r', encoding='utf-8') as fin:
        for lineno, line in enumerate(fin, 1):
            line = line.strip()
            if not line:
                continue
            try:
                obj = json.loads(line)
            except json.JSONDecodeError as e:
                print(f"跳过第 {lineno} 行，JSON 解析错误：{e}")
                continue
            inp = obj.get("input").replace(" ", "").replace("\\n", "")
            out = obj.get("output")
            if inp is None or out is None:
                print(f"跳过第 {lineno} 行，缺少 'input' 或 'output' 字段")
                continue
            input2outputs[inp].append(out)

    # 2. 分析重复 input 的输出一致性
    any_dup = False
    for inp, outs in input2outputs.items():
        if len(outs) > 1:
            any_dup = True
            unique_outs = set(outs)
            if len(unique_outs) == 1:
                print(f"✅ input 重复（共 {len(outs)} 条），output 一致\n ")
            else:
                print(f"❌ input 重复（共 {len(outs)} 条），output 不一致：\n")
                for idx, o in enumerate(unique_outs, 1):
                    print(f"    {idx}. {o!r}")
                print()

    if not any_dup:
        print("未发现任何重复的 input。")

if __name__ == "__main__":
    main()
